"""
抽象基类（不推荐使用，容易设计过度，尽量使用鸭子类型）

需求：
    需要强制某个子类必须实现某些方法。
    实现了一个web框架，集成cache（redis、cache、memorycache），需要设计一个抽象基类，指定子类必须实现某些方法。
"""

import abc
from collections.abc import Sized


class Company(object):
    def __init__(self, employee_list):
        self.employee_list = employee_list

    def __len__(self):
        return len(self.employee_list)


class CacheBase(metaclass=abc.ABCMeta):
    """
    缓存基类
    """

    @abc.abstractmethod
    def get(self, key):
        pass

    @abc.abstractmethod
    def set(self, key, value):
        pass


class RedisCache(CacheBase):
    """
    Redis缓存
    """

    pass


if __name__ == '__main__':
    company = Company(["Kevin", "葛小伦"])

    # 正常的调用方法
    print(hasattr(company, "__len__"))
    # 输出结果：
    """
    True
    """

    # 结合使用抽象类
    print(isinstance(company, Sized))
    # 输出结果：
    """
    True
    """

    # redis_cache = RedisCache()
    # redis_cache.set("name", "葛小伦")
